博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javaweb 一个Servlet 处理多个请求(运用反射机制)
阅读量:3904 次
发布时间:2019-05-23

本文共 2364 字,大约阅读时间需要 7 分钟。

实现原理

前端发送请求的时候需要自带一个action参数,用于寻找Servlet中是否存在这个方法。

建立一个Servlet基类,并重写service方法,主要实现判断自己的这个类中是否存在action参数值中对等的方法,如果有调用invoke方法执行这个方法。

其他的Servlet继承这个基类,并写下不同请求所对应的不同方法,因为继承基类,所以当前端发送请求时会自动执行基类中的service方法,因此就相当于在这个Servlet类中是否存在action参数值的方法。

代码展示

基类:

import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.lang.reflect.Method;public class BaseServlet extends HttpServlet {
protected void service (HttpServletRequest request,HttpServletResponse response) throws UnsupportedEncodingException {
request.setCharacterEncoding("utf-8"); // 接收前端发送的action参数 String action = request.getParameter("action"); // 获取类的字节码 Class clazz = this.getClass(); Method method = null; try {
// 获取类中的方法 method = clazz.getMethod(action, HttpServletRequest.class, HttpServletResponse.class); if(method!=null) {
// 调用方法 String desPath = (String)method.invoke(this,request,response); if(desPath!=null) {
// 指执行完方法后跳转的位置 request.getRequestDispatcher(desPath).forward(request,response); } } } catch (Exception e) {
e.printStackTrace(); } }}

测试Servlet类:

import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@WebServlet("/TestServlet")public class TestServlet extends BaseServlet {
// 处理请求1 public String Test1(HttpServletRequest request,HttpServletResponse response) {
System.out.println("This is Test1"); return "/TestServlet?action=Test2"; } // 处理请求2 public String Test2(HttpServletRequest request,HttpServletResponse response) {
System.out.println("This is Test2"); return "index.jsp"; }}

前端:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>      $Title$      click me  

此测试是index向Test1发送请求,然Test1处理完后转发到Test2,Test2再转发到index

运行结果:
在这里插入图片描述
在这里插入图片描述

转载地址:http://sdaen.baihongyu.com/

你可能感兴趣的文章
python append 与浅拷贝
查看>>
Matlab与CUDA C的混合编程配置出现的问题及解决方案
查看>>
2017阿里内推笔试题--算法工程师(运筹优化)
查看>>
python自动化工具之pywinauto(零)
查看>>
python一句话之利用文件对话框获取文件路径
查看>>
PaperDownloader——文献命名6起来
查看>>
PaperDownloader 1.5.1——更加人性化的文献下载命名解决方案
查看>>
如何将PaperDownloader下载的文献存放到任意位置
查看>>
C/C++中关于动态生成一维数组和二维数组的学习
查看>>
系统架构:Web应用架构的新趋势---前端和后端分离的一点想法
查看>>
JVM最简生存指南
查看>>
漂亮的代码,糟糕的行为——解决Java运行时的内存问题
查看>>
Java的对象驻留
查看>>
自己动手写GC
查看>>
Java 8新特性终极指南
查看>>
logback高级特性使用(二) 自定义Pattern模板
查看>>
JVM并发机制探讨—内存模型、内存可见性和指令重排序
查看>>
可扩展、高可用服务网络设计方案
查看>>
如何构建高扩展性网站
查看>>
微服务架构的设计模式
查看>>